home *** CD-ROM | disk | FTP | other *** search
Verilog source code | 1992-06-18 | 1.1 KB | 59 lines | [TEXT/MPS ] |
- module write_buffer(reset, clock, addr, write_data, write, read_data, read, read_hit, full, ready, write_data_out, write_addr_out);
- input reset,
- clock,
- read,
- write;
- input [31: 0]addr,
- write_data;
- output [31: 0]read_data,
- write_data_out,
- write_addr_out;
- output read_hit,
- full,
- ready;
-
- reg [31: 0]d[4];
- reg [31: 0]a[4];
- reg v[4];
- reg [ 3: 0]in,
- out;
-
- assign full = v[0] && v[1] && v[2] && v[3];
- assign ready = v[0] | v[1] | v[2] | v[3];
-
- assign read_hit = (v[0] && a[0] == addr) ||
- (v[1] && a[1] == addr) ||
- (v[2] && a[2] == addr) ||
- (v[3] && a[3] == addr);
-
- assign read_data = (v[0] && a[0] == addr ? d[0] :
- v[1] && a[1] == addr ? d[1] :
- v[2] && a[2] == addr ? d[2] : d[3]);
-
- assign write_data_out = d[out];
- assign write_addr_out = a[out];
-
- always @(clock)
- if (~reset) begin
- v[0] = 0;
- v[1] = 0;
- v[2] = 0;
- v[3] = 0;
- in = 0;
- out = 0;
- end
-
- always @(negedge write) begin
- d[in] = write_data;
- a[in] = addr;
- v[in] = 1;
- in = (in+1)&3;
- end
-
- always @(posedge read) begin
- v[out] = 0;
- out = (out+1)&3;
- end
-
-
- endmodule